package com.rr.study02.cliente;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

public class ClienteDaoJpa implements ClienteDAO {

	private EntityManager entManager;
	
	public EntityManager getEntManager() {
		return entManager;
	}

	public void setEntManager(EntityManager entManager) {
		this.entManager = entManager;
	}

	@Override
	public void salvar(Cliente cliente) {
		System.out.println("Entrou aqui: ClienteDaoJpa.salvar");
		System.out.println("Cliente: " + cliente.getNome());
		entManager.persist(cliente);
	}

	@Override
	public List<Cliente> listar() {
		CriteriaBuilder criBuilder = entManager.getCriteriaBuilder();
		CriteriaQuery<Cliente> criQuery = criBuilder.createQuery(Cliente.class);
		Root<Cliente> clienteRoot = criQuery.from(Cliente.class);
		criQuery.select(clienteRoot);
		return entManager.createQuery(criQuery).getResultList();
	}

	@Override
	public void excluir(Cliente cliente) {
		entManager.remove(cliente);
	}

	@Override
	public Cliente pesquisar(String string) {
		Query consultaNome = this.entManager.createQuery("from Cliente c where c.nome like :nome"); 
		consultaNome.setParameter("nome", "%" + string + "%");
		@SuppressWarnings("unchecked")
		List<Cliente> clientes = (List<Cliente>) consultaNome.getResultList();
		return clientes.get(0);
	}

	@Override
	public void alterar(Cliente cliente) {
		entManager.merge(cliente);
	}

}
